home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Przegladarki internetowe / Mozilla Seamonkey 1.0.5 pl / seamonkey-1.0.5.pl-PL.win32.installer.exe / MAIL.XPI / bin / chrome / messenger.jar / content / messenger / junkMail.js < prev    next >
Encoding:
JavaScript  |  2004-04-16  |  10.8 KB  |  273 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is mozilla.org code.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 2002
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Seth Spitzer <sspitzer@netscape.com>
  23.  *   Dan Mosedale <dmose@netscape.com>
  24.  *
  25.  * Alternatively, the contents of this file may be used under the terms of
  26.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  27.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  28.  * in which case the provisions of the GPL or the LGPL are applicable instead
  29.  * of those above. If you wish to allow use of your version of this file only
  30.  * under the terms of either the GPL or the LGPL, and not to allow others to
  31.  * use your version of this file under the terms of the MPL, indicate your
  32.  * decision by deleting the provisions above and replace them with the notice
  33.  * and other provisions required by the GPL or the LGPL. If you do not delete
  34.  * the provisions above, a recipient may use your version of this file under
  35.  * the terms of any one of the MPL, the GPL or the LGPL.
  36.  *
  37.  * ***** END LICENSE BLOCK ***** */
  38.  
  39. var gSpamSettings = {};
  40. var gCurrentServer;
  41. var gMessengerBundle;
  42.  
  43. const kJunkOnLocalFolderURI = "mailbox://nobody@Local%20Folders/Junk";
  44.  
  45. function onJunkMailLoad()
  46. {
  47.   gMessengerBundle = document.getElementById("bundle_messenger");
  48.   if (window.arguments && window.arguments[0]) {
  49.     setupForAccountFromFolder(window.arguments[0].folder ? window.arguments[0].folder.URI : null);
  50.   }
  51. }
  52.  
  53. function onServerClick(event)
  54.   if (gCurrentServer.serverURI == event.target.id)
  55.     return;
  56.  
  57.   // before we set the UI for the new server,
  58.   // save off the old one
  59.   storeSettings(gSpamSettings[gCurrentServer.key].settings, gCurrentServer.spamSettings.loggingEnabled);
  60.  
  61.   // set up the UI for the server
  62.   setupForAccountFromFolder(event.target.id);
  63. }
  64.  
  65. function setupForAccountFromFolder(aURI)
  66. {
  67.   try {
  68.     if (!aURI)
  69.       throw "this can happen if no folder is selected in the folder pane"
  70.     var msgFolder = GetMsgFolderFromUri(aURI, false);
  71.     gCurrentServer = msgFolder.server;
  72.  
  73.     if (gCurrentServer.type == "nntp")
  74.       throw "this can happen if the selected folder (or account) doesn't have junk controls (news)"
  75.   }
  76.   catch (ex) {
  77.     // get server for default account
  78.     // XXX TODO
  79.     // edge cases to worry about later:
  80.     // what if there is no default account? 
  81.     // what if default account is of a type where canGetIncomingMessages == true?
  82.     // what if no accounts are of a type where canGetIncomingMessages == true?
  83.     var accountManager = Components.classes["@mozilla.org/messenger/account-manager;1"]
  84.                .getService(Components.interfaces.nsIMsgAccountManager);
  85.     var account = accountManager.defaultAccount;
  86.     gCurrentServer = account.incomingServer;
  87.   }
  88.  
  89.   var obj;
  90.   var key = gCurrentServer.key;
  91.  
  92.   if (key in gSpamSettings) {
  93.     obj = gSpamSettings[key];
  94.   }
  95.   else {
  96.     // get and clone spam settings for this server
  97.     // we clone because if the users cancels we are going to throw away the changes
  98.     var settings = Components.classes["@mozilla.org/messenger/spamsettings;1"].createInstance(Components.interfaces.nsISpamSettings);
  99.     settings.clone(gCurrentServer.spamSettings);
  100.     obj = {server: gCurrentServer, settings: settings}; 
  101.     gSpamSettings[key] = obj;
  102.   } 
  103.  
  104.   // select server in the menulist
  105.   var serverList = document.getElementById("server");
  106.   var menuitems = serverList.getElementsByAttribute("id", obj.server.serverURI);
  107.   serverList.selectedItem = menuitems[0];
  108.  
  109.   // set up the UI for this server
  110.   // set up the level checkbox
  111.   document.getElementById("level").checked = (obj.settings.level > 0);
  112.  
  113.   // set up the junk mail folder picker
  114.   document.getElementById("moveOnSpam").checked = obj.settings.moveOnSpam;
  115.   document.getElementById("moveTargetMode").selectedItem = document.getElementById("moveTargetMode" + obj.settings.moveTargetMode);
  116.  
  117.   // set up the 'mark as read' checkbox
  118.   document.getElementById("markAsReadOnSpam").checked = obj.settings.markAsReadOnSpam;
  119.  
  120.   // the default account should be the current account
  121.   // unless you can't create a folder on that server
  122.   // or search on that account (for purge)
  123.   // in which case, use Local Folders
  124.   var defaultAccountURI = obj.server.canCreateFoldersOnServer && obj.server.canSearchMessages ? obj.server.serverURI : "mailbox://nobody@Local%20Folders";
  125.   // if there is a target account, use it, else use the default account
  126.   SetFolderPicker(obj.settings.actionTargetAccount ? obj.settings.actionTargetAccount : defaultAccountURI, "actionTargetAccount");
  127.   
  128.   // if there is a target account, use it, else use Junk on Local Folders  
  129.   if (obj.settings.actionTargetFolder) 
  130.     SetFolderPicker(obj.settings.actionTargetFolder, "actionTargetFolder");
  131.   else {
  132.     // note, this folder might not exist, but better this than ""
  133.     // and, we'll create it if we try to use it.
  134.     SetFolderPicker(kJunkOnLocalFolderURI, "actionTargetFolder");
  135.   }
  136.  
  137.   // set up the purge UI
  138.   document.getElementById("purge").checked = obj.settings.purge;
  139.   document.getElementById("purgeInterval").value = obj.settings.purgeInterval;
  140.  
  141.   // set up the whitelist UI
  142.   document.getElementById("useWhiteList").checked = obj.settings.useWhiteList;
  143.   var abList = document.getElementById("whiteListAbURI");
  144.   menuitems = abList.getElementsByAttribute("id", obj.settings.whiteListAbURI);
  145.   abList.selectedItem = menuitems[0];
  146.  
  147.   // set up the manual mark UI
  148.   document.getElementById("manualMark").checked = obj.settings.manualMark;
  149.   document.getElementById("manualMarkMode").selectedItem = document.getElementById("manualMarkMode" + obj.settings.manualMarkMode);
  150.  
  151.   conditionallyEnableUI(null);
  152. }
  153.  
  154. function junkLog()
  155. {
  156.   // pass in the "real" spam settings, as it's the one with the logStream
  157.   var args = {spamSettings: gCurrentServer.spamSettings};
  158.   window.openDialog("chrome://messenger/content/junkLog.xul", "junkLog", "chrome,modal,titlebar,resizable,centerscreen", args);
  159. }
  160.  
  161. function onAccept()
  162. {
  163.   // store the current changes
  164.   storeSettings(gSpamSettings[gCurrentServer.key].settings, gCurrentServer.spamSettings.loggingEnabled);
  165.  
  166.   for (var key in gSpamSettings) {
  167.     try {
  168.       // if they hit ok, set the "real" server's spam settings.  
  169.       // this will set prefs.
  170.       gSpamSettings[key].server.spamSettings = gSpamSettings[key].settings;
  171.     }
  172.     catch (ex) {
  173.       dump("spam setting not saved: " + ex);
  174.     }
  175.   }
  176.   return true;
  177. }
  178.  
  179. function storeSettings(aSettings, aLoggingEnabled)
  180. {
  181.   aSettings.level = document.getElementById("level").checked ? 100 : 0;
  182.   aSettings.markAsReadOnSpam = document.getElementById("markAsReadOnSpam").checked;
  183.   aSettings.moveOnSpam = document.getElementById("moveOnSpam").checked;
  184.   aSettings.moveTargetMode = document.getElementById("moveTargetMode").value;
  185.   aSettings.actionTargetAccount = document.getElementById("actionTargetAccount").getAttribute("uri");
  186.   var targetFolderURI = document.getElementById("actionTargetFolder").getAttribute("uri");
  187.   if (targetFolderURI)
  188.     aSettings.actionTargetFolder = targetFolderURI;
  189.   else {
  190.     // note, this folder might not exist, but better this than ""
  191.     // and, we'll create it if we try to use it.
  192.     aSettings.actionTargetFolder = kJunkOnLocalFolderURI;
  193.   }
  194.  
  195.   aSettings.purge = document.getElementById("purge").checked;
  196.   aSettings.purgeInterval = document.getElementById("purgeInterval").value;
  197.  
  198.   aSettings.useWhiteList = document.getElementById("useWhiteList").checked;
  199.   aSettings.whiteListAbURI = document.getElementById("whiteListAbURI").selectedItem.getAttribute("id");
  200.   aSettings.loggingEnabled = aLoggingEnabled;
  201.  
  202.   aSettings.manualMark = document.getElementById("manualMark").checked;
  203.   aSettings.manualMarkMode = document.getElementById("manualMarkMode").value;
  204. }
  205.  
  206. function conditionallyEnableUI(id)
  207. {
  208.   if (!document.getElementById("level").checked) {
  209.     document.getElementById("useWhiteList").disabled = true;
  210.     document.getElementById("whiteListAbURI").disabled = true;
  211.     document.getElementById("moveOnSpam").disabled = true;
  212.     document.getElementById("markAsReadOnSpam").disabled = true;
  213.  
  214.     document.getElementById("moveTargetMode").disabled = true;
  215.     document.getElementById("actionTargetAccount").disabled = true;
  216.     document.getElementById("actionTargetFolder").disabled = true;
  217.  
  218.     document.getElementById("purge").disabled = true;
  219.     document.getElementById("purgeInterval").disabled = true;
  220.     document.getElementById("purgeLabel").disabled = true;
  221.  
  222.     document.getElementById("manualMark").disabled = true;
  223.     document.getElementById("manualMarkMode").disabled = true;
  224.     return;
  225.   }
  226.  
  227.   document.getElementById("useWhiteList").disabled = false;
  228.   document.getElementById("moveOnSpam").disabled = false;
  229.   document.getElementById("markAsReadOnSpam").disabled = false;
  230.   document.getElementById("manualMark").disabled = false;
  231.  
  232.   var enabled;
  233.   
  234.   if (!id || id == "manualMark") {
  235.     enabled = document.getElementById("manualMark").checked;
  236.     // need to enable manualMarkMode before we enable manualMarkMode0
  237.     document.getElementById("manualMarkMode").disabled = !enabled;
  238.   }
  239.  
  240.   if (!id || id == "moveOnSpam") {
  241.     enabled = document.getElementById("moveOnSpam").checked;
  242.     var choice = document.getElementById("moveTargetMode").value;
  243.  
  244.     document.getElementById("moveTargetMode").disabled = !enabled;
  245.     document.getElementById("actionTargetAccount").disabled = !enabled || (choice == 1);
  246.     document.getElementById("actionTargetFolder").disabled = !enabled || (choice == 0);
  247.  
  248.     var checked = document.getElementById("purge").checked;
  249.     document.getElementById("purge").disabled = !enabled;
  250.     document.getElementById("purgeInterval").disabled = !enabled || !checked;
  251.     document.getElementById("purgeLabel").disabled = !enabled;
  252.     
  253.     if (!document.getElementById("manualMarkMode").disabled)
  254.       document.getElementById("manualMarkMode0").disabled = !enabled;
  255.   }
  256.  
  257.   if (id == "purge") {
  258.     enabled = document.getElementById("purge").checked;
  259.     document.getElementById("purgeInterval").disabled = !enabled;
  260.   }
  261.  
  262.   if (!id || id == "useWhiteList") {
  263.     enabled = document.getElementById("useWhiteList").checked;
  264.     document.getElementById("whiteListAbURI").disabled = !enabled;
  265.   }
  266. }
  267.  
  268. function doHelpButton()
  269. {
  270.   openHelp("mail-junk-controls");
  271. }
  272.